package top.ajunnihao.core.mapper;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import top.ajunnihao.core.entity.Message;

import java.util.List;

/**
 * TODO 帖子持久层接口
 *
 * @author AJun
 * @version 1.0.0
 * @date 2020/5/24
 */
@Repository
public interface MessageMapper {

    /**
     * 分页查询帖子信息
     *
     * @param offset 分页开始索引
     * @param limit  每页查询记录数
     * @return 帖子列表
     */
    List<Message> findMessageByPage(@Param("offset") Integer offset,
                                    @Param("limit") Integer limit);

    /**
     * 分页查询回复信息
     *
     * @param msgId  主帖 id
     * @param offset 分页开始索引
     * @param limit  每页查询记录数
     * @return 帖子列表
     */
    List<Message> findMessageReplyByPage(@Param("msgId") Long msgId,
                                         @Param("offset") Integer offset,
                                         @Param("limit") Integer limit);

    /**
     * 查询精华帖
     *
     * @return 帖子列表
     */
    List<Message> findNiceMsg();

    /**
     * 查询最新四条帖子
     *
     * @return 帖子列表
     */
    List<Message> findNewMsg();

    /**
     * 根据主贴 id 查询帖子信息，包括 User 信息
     *
     * @param msgId 主贴 id
     * @return 单个帖子信息
     */
    Message findMessageById(@Param("msgId") Long msgId);

    /**
     * 查询 del = 1 的帖子
     *
     * @return 帖子列表
     */
    List<Message> findDelMsg();

    /**
     * 查询主帖总数量
     *
     * @return 帖子数量
     */
    Integer findMessageCount();

    /**
     * 查询是回复的帖子的总数量
     *
     * @return 帖子数量
     */
    Integer findMessageReplyCount(@Param("msgId") Long msgId);

    /**
     * 查询帖子标志位
     *
     * @param msgId 帖子 id
     * @return 帖子信息
     */
    Message findMessageFlag(@Param("msgId") Long msgId);

    /**
     * 保存帖子信息
     *
     * @param message 帖子信息
     * @return 更新行数
     */
    int saveMessage(Message message);

    /**
     * 修改帖子信息
     *
     * @param message 帖子信息
     * @return 更新行数
     */
    int updateMessage(Message message);

    /**
     * 修改帖子删除标志
     *
     * @param msgId 帖子 Id
     * @return 更新行数
     */
    int updateMsgDelFlag(@Param("msgId") Long msgId);

    /**
     * 修改帖子置顶标志
     *
     * @param msgId 帖子 Id
     * @return 更新行数
     */
    int updateMsgTopFlag(@Param("msgId") Long msgId, @Param("topFlag") Integer topFlag);

    /**
     * 修改帖子加精标志
     *
     * @param msgId 帖子 Id
     * @return 更新行数
     */
    int updateMsgNiceFlag(@Param("msgId") Long msgId, @Param("niceFlag") Integer niceFlag);

    /**
     * 删除帖子
     *
     * @param id 帖子 id
     * @return 更新行数
     */
    int deleteMessage(Long id);

}
